
当我们进行计算的时候,bash 到底能不能了解我们给予的是数字还是纯字符呢?这
个非常重要,因为会造成系统的误判。

让我们试试看!

当我们输入 3*8 的结果时,应当怎么做呢?如果我们用命令行逐行输入,结果如下:
\begin{shaded}
\begin{verbatim}
winelder@winelder:~/Documents/scripts$ a=3
winelder@winelder:~/Documents/scripts$ b=8
winelder@winelder:~/Documents/scripts$ c=$a*$b
winelder@winelder:~/Documents/scripts$ echo $c
3*8
winelder@winelder:~/Documents/scripts$ 
\end{verbatim}
\end{shaded}

上面输出的并不是我们所希望的 24(3*8=24) 的结果,到底是什么原因呢??这是因
为我们没有定义该变量,因此该变量仍然呈现默认的字符串形式。

所以我们需要先声明变量,声明变量使用 \texttt{declare} 指令。

\texttt{declare}\\
语法:

\texttt{declare [-afirx]}

参数说明:

\texttt{-a}: 定义为数组 array
          
\texttt{-f}: 定义为函数 function
          
\texttt{-i}: 定义为整数 integer
          
\texttt{-r}: 定义为只读
          
\texttt{-x}: 定义为通过环境输出变量

下面是脚本的完整例子：
\begin{shaded}
\begin{verbatim}
#!/bin/bash
#filenaem: declare_variable.sh
declare -i a=3
declare -i b=8
declare -i c=$a*$b
echo "$a * $b = $c"
\end{verbatim}
\end{shaded}

执行脚本，输出：
\begin{shaded}
\begin{verbatim}
./declare_variable.sh
3 * 8 = 24
\end{verbatim}
\end{shaded}

\begin{flushright}
  \hyperref[content]{回到目录}
\end{flushright}